//
//  Problem414.swift
//  LeetCode
//
//  Created by 武侠 on 2023/6/19.
//  Copyright © 2023 zhulongiMac02. All rights reserved.
//

import UIKit

/*
 414. 第三大的数 简单
 
 给你一个非空数组，返回此数组中 第三大的数 。如果不存在，则返回数组中最大的数。
  
 示例 1：
     输入：[3, 2, 1]
     输出：1
     解释：第三大的数是 1 。
 示例 2：
     输入：[1, 2]
     输出：2
     解释：第三大的数不存在, 所以返回最大的数 2 。
 示例 3：
     输入：[2, 2, 3, 1]
     输出：1
     解释：注意，要求返回第三大的数，是指在所有不同数字中排第三大的数。
     此例中存在两个值为 2 的数，它们都排第二。在所有不同数字中排第三大的数为 1 。
  
 提示：
 1 <= nums.length <= 104
 -231 <= nums[i] <= 231 - 1

 进阶：你能设计一个时间复杂度 O(n) 的解决方案吗？
 */
class Problem414: NSObject {
    
    /*
     方法：数组
     1: 定义一个长3的Int: first、second、third，分别存储最大的3个值；
     2: 遍历数组nums，依次和3个值比较
        2.1: 如果 n >= first，那么这3个值依次后移
        2.2: 如果 second <= n < first, 那么second后移
        2.3: 如果 third < n < second, 替换third
     */
    func thirdMax(_ nums: [Int]) -> Int {
        var first = Int.min, second = Int.min, third = Int.min
        for n in nums {
            if n == first || n == second || n == third {
                continue
            }
            if n > first {
                third = second
                second = first
                first = n
            } else if n > second {
                third = second
                second = n
            } else if n > third {
                third = n
            }
        }
        return third == Int.min ? first : third
    }
}
